package disenioPantallas.fichaAnimal;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.BoxLayout;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerDateModel;
import javax.swing.SwingConstants;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;


import actionListeners.MascaraMayusculakeyListener;
import actionListeners.MascaraTipoIntListener;

import java.awt.Font;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
import javax.swing.UIManager;

import disenioPantallas.elementos.EButton;
import disenioPantallas.elementos.ELabel;
import disenioPantallas.elementos.EPanel;
import disenioPantallas.elementos.ETextField;
import disenioPantallas.elementos.MyTableModel;
import disenioPantallas.elementos.dialogGeneral;

import entidades.Animal;
import entidades.Caravana;
import gestores.GestorAnimal;
import gestores.GestorErrores;


public class DCaravanasAnimal extends dialogGeneral {

	private static final long serialVersionUID = 1L;
	private GestorAnimal gAnimal=GestorAnimal.getGestorAnimal();
	private JTextField txCaravana;
	private GestorErrores gError=GestorErrores.getGestorErrores();
	private Vector<Caravana> caravanas= new Vector<Caravana>();
	private Animal animal=GestorAnimal.getGestorAnimal().getAnimalActual();
	
	private JTable table;
	private JSpinner spinner;
	private JScrollPane scrollPane;
	
	public DCaravanasAnimal() {
		setPreferredSize(new Dimension(700, 400));
		setTitle("Ingresar Caravana");
		setMinimumSize(new Dimension(700, 400));
		getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
		
		Component verticalStrut = Box.createVerticalStrut(8);
		getContentPane().add(verticalStrut);
		
		JPanel panelTitulo = new EPanel();
		getContentPane().add(panelTitulo);
		
		String titulo=String.format("Peajes de Animal con id: #%d", animal.getIdAnimal());
		panelTitulo.setLayout(new BoxLayout(panelTitulo, BoxLayout.X_AXIS));
		JLabel lblPeajesDeAnimal = new ELabel(titulo);
		lblPeajesDeAnimal.setFont(new Font("Cambria", Font.PLAIN, 20));
		panelTitulo.add(lblPeajesDeAnimal);
		
		JPanel panelPesaje = new JPanel();
		panelPesaje.setOpaque(false);
		getContentPane().add(panelPesaje);
		panelPesaje.setLayout(new BoxLayout(panelPesaje, BoxLayout.X_AXIS));
		
		JPanel panelListado = new JPanel();
		panelListado.setOpaque(false);
		panelPesaje.add(panelListado);
		
		scrollPane = new JScrollPane();
		String caravanaTitulo=String.format("Caravana Actual: %s [id:%d]", animal.getCaravanaActual().getCaravana(),animal.getCaravanaActual().getIdCaravana());
		scrollPane.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), caravanaTitulo, TitledBorder.LEADING, TitledBorder.TOP, null, null));
		scrollPane.setPreferredSize(new Dimension(400, 300));
		scrollPane.setMinimumSize(new Dimension(400, 300));
		panelListado.add(scrollPane);
		
		table = new JTable();
		scrollPane.setViewportView(table);

		try {
			caravanas=gAnimal.getListadeCaravanas();
			table.setModel(new listadoCaravanas(caravanas));

		} catch (Throwable e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}

		
		JPanel panelNuevo = new JPanel();
		panelNuevo.setOpaque(false);
		panelPesaje.add(panelNuevo);
		panelNuevo.setLayout(new BoxLayout(panelNuevo, BoxLayout.Y_AXIS));
		
		Component verticalStrut_1 = Box.createVerticalStrut(20);
		panelNuevo.add(verticalStrut_1);
		
		JPanel panelFecha = new EPanel();
		panelFecha.setPreferredSize(new Dimension(250, 50));
		panelFecha.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panelFecha);
		
		JLabel lblFecha = new JLabel("Fecha:");
		lblFecha.setFont(new Font("Cambria", Font.PLAIN, 16));
		panelFecha.add(lblFecha);
		lblFecha.setHorizontalAlignment(SwingConstants.LEFT);
		
		Component horizontalStrut_1 = Box.createHorizontalStrut(20);
		panelFecha.add(horizontalStrut_1);
		
		spinner = new JSpinner();
		spinner.setFont(new Font("Cambria", Font.PLAIN, 16));
		spinner.setModel(new SpinnerDateModel(new Date(1357268400000L), new Date(-2208973392000L), null, Calendar.DAY_OF_YEAR));
		spinner.setPreferredSize(new Dimension(150, 35));
		spinner.setValue(new Date());
		panelFecha.add(spinner);

		
		JPanel panelPeso = new EPanel();
		panelPeso.setPreferredSize(new Dimension(250, 50));
		panelPeso.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panelPeso);
		
		JLabel lblPeso = new JLabel("Nueva:");
		lblPeso.setFont(new Font("Cambria", Font.PLAIN, 16));
		panelPeso.add(lblPeso);
		lblPeso.setHorizontalAlignment(SwingConstants.LEFT);
		
		Component horizontalStrut = Box.createHorizontalStrut(20);
		panelPeso.add(horizontalStrut);
		
		txCaravana = new ETextField();
		panelPeso.add(txCaravana);
		txCaravana.setMaximumSize(new Dimension(150, 35));
		txCaravana.addKeyListener(new MascaraMayusculakeyListener()	);
		
		JPanel panelAgregar = new EPanel();
		panelAgregar.setPreferredSize(new Dimension(250, 50));
		panelAgregar.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panelAgregar);
		
		JButton btnAgregar = new EButton("AGREGAR");
		panelAgregar.add(btnAgregar);
		btnAgregar.addActionListener(new agregarAction());
		
		EPanel panelBtnFinal = new EPanel();
		panelNuevo.add(panelBtnFinal);
		panelBtnFinal.setPreferredSize(new Dimension(250, 50));
		panelBtnFinal.setMaximumSize(new Dimension(250, 50));
		
		EButton btnFinal = new EButton("FINAL");
		panelBtnFinal.add(btnFinal);
		btnFinal.addActionListener(new CaravanaFinalAction());
		
		JPanel panel = new JPanel();
		panel.setOpaque(false);
		panel.setPreferredSize(new Dimension(250, 50));
		panel.setMinimumSize(new Dimension(250, 50));
		panel.setMaximumSize(new Dimension(250, 50));
		panelNuevo.add(panel);
		
		JButton btnSalir = new EButton("SALIR");
		panel.add(btnSalir);
		btnSalir.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				cerrarDialog();
			}
		});
		
		btnSalir.setMaximumSize(new Dimension(150, 35));
		
		Component verticalGlue = Box.createVerticalGlue();
		panelNuevo.add(verticalGlue);

	}


	
	private class listadoCaravanas extends MyTableModel {

		private static final long serialVersionUID = 1L;
		
		public listadoCaravanas(Vector<Caravana> listaCaravana){
			super();
			
			String[] columnas={"CARAVANA","FECHA DE CREACION"};
			setColumnNames(columnas);
			Object[][] info= new Object[0][2];
			setColumnNames(columnas);
			
			if(listaCaravana.size()>0){
				info= new Object[listaCaravana.size()][2];
				for(int i=0;i<listaCaravana.size();i++){
					info[i][0]=listaCaravana.get(i).getCaravana();
					info[i][1]=listaCaravana.get(i).getFecha();
					if(listaCaravana.get(i).isCaravanaFinal()) info[i][0]+=" [Final]";
				}
			}
			setInfo(info);
			boolean[] edits= {false,false};
			setEdits(edits);
			
			
			
		}
	
	}
	
	private class agregarAction extends AbstractAction{


		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent e) {
			String caravana;
			Date fecha=(Date) spinner.getValue();
			if(!animal.getCaravanaActual().isCaravanaFinal()){
				if(!txCaravana.getText().equals("")){
					caravana=txCaravana.getText();
					 try {
						 int idCaravana=gAnimal.registrarCaravana(caravana,fecha);
						 Caravana actual=new Caravana(idCaravana ,caravana, gAnimal.getAnimalActual().getIdAnimal() ,false , fecha);
						 caravanas.add(actual);
						 animal.setCaravanaActual(actual);
						 table.setModel(new listadoCaravanas(caravanas));
						 String caravanaTitulo=String.format("Caravana Actual: %s [id:%d]", animal.getCaravanaActual().getCaravana(),animal.getCaravanaActual().getIdCaravana());
						 scrollPane.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), caravanaTitulo, TitledBorder.LEADING, TitledBorder.TOP, null, null));
						 gError.mostrarCartelAdvertencia("Se ha registrado Correctamente");
					} catch (Throwable e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
						gError.mostrarCartelError(e1.getMessage());
					}
				}
				else{
					gError.mostrarCartelError("Agregue una Caravana");
				}
			}else{
				gError.mostrarCartelError("Este Animal ya tiene una caravana Final : " + animal.getCaravanaActual().getCaravana());
			}
			
		}
		
	}
	private class CaravanaFinalAction extends AbstractAction{

		
		public void actionPerformed(ActionEvent e) {
			if(!animal.getCaravanaActual().isCaravanaFinal()){ 
				 try {
					 gAnimal.setCaravanaFinal(animal.getCaravanaActual().getIdCaravana());
					 animal.getCaravanaActual().setCaravanaFinal(true);
					 table.setModel(new listadoCaravanas(caravanas));
					 gError.mostrarCartelAdvertencia("Se ha registrado Correctamente");
				} catch (Throwable e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
					gError.mostrarCartelError(e1.getMessage());
				}
			}
			else{
				gError.mostrarCartelError("Este animal ya tiene una caravana Final");
			}

		}
		
	}
}

	